/*
 * @Author: 陈宇 975155172@qq.com
 * @Date: 2024-08-13 16:13:00
 * @LastEditors: 陈宇 975155172@qq.com
 * @LastEditTime: 2024-08-26 09:28:51
 * @FilePath: \blog-web\vite.config.ts
 * @Description: vite 配置文件
 */
import { fileURLToPath, URL } from 'node:url'

import { loadEnv, defineConfig, type UserConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'

let env = {} as any
env = loadEnv(process.argv[3] === '--mode' ? process.argv[4] : process.argv[3], process.cwd())

const timestamp = new Date().getTime();

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    vueDevTools()
  ],
  // base: "/blog/", //生产环境路径
  server: {
    open: true, //自动打开
    // port: 8000, // 指定服务器端口
    cors: true,
    proxy: { // 本地开发环境通过代理实现跨域，生产环境使用 nginx 转发
      // 正则表达式写法
      '^/api': {
        target: 'http://localhost:38090', // 后端服务实际地址
        changeOrigin: true, //开启代理
        rewrite: (path) => path.replace(/^\//, '')
      }
    }
  },
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    }
  },
  build: {
    outDir: env.VITE_OUT_DIR, // 构建时输出目录
    assetsDir: 'assets', // 放置生成的静态资源的目录
    terserOptions: {
      compress: {
        drop_console: env.VITE_DROP_CONSOLE === 'true', // 是否删除所有的console语句 
      },
    },
    // 是否为生产环境构建生成source map
    sourcemap: false,
    // 构建后是否进行代码分割
    rollupOptions: {
      output: {
        entryFileNames: `assets/[name].[hash].${ timestamp }.js`,
        chunkFileNames: `assets/[name].[hash].${ timestamp }.js`,
        assetFileNames: `assets/[name].[hash].${ timestamp }.[ext]`,
      },
    },
  },
})
